﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Configuration;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.IO;
using System.Xml;

namespace MyVideoTek
{
    public partial class Main : Form
    {
        #region Attributs
        GestionDossierFichier DossierSource = new GestionDossierFichier();
        SqlDataAbstract lesDatas;
        string cheminFilm;
        #endregion

        #region Constricteur
        public Main()
        {
            //Initialisation des composants
            InitializeComponent();

            //Propiété d'affichage
           // this.Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height - 40;
           // this.Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;

            //Chargement des DATA sources s'il y en a
            GetDataSourceConfig();
            
            //Charge toute les données
            LoadData();
        }
        #endregion

        #region Recpuère le fichier de configuration
        private void GetDataSourceConfig()
        {
            string nom = ConfigurationManager.AppSettings["nom"];

            if (nom == null)
            {
                //Aucun path, premier lancement de l'application
          //      SelectionnerFolderPath ajouterDesDossiers = new SelectionnerFolderPath();
          //      ajouterDesDossiers.ShowDialog();
            }
            else
            {
                /*
                //Path présent
                foreach (string aValue in ConfigurationManager.AppSettings)
                {
                    MessageBox.Show(ConfigurationManager.AppSettings[aValue]);
                }
                 * */
            }
        }
        #endregion

        #region Affiche le film selectionné
        private void AfficheSelectedFilm()
        {
            //Réinitialisation
            AfficheFilmBox.ImageLocation = null;
            SynopsisTextBox.Text = null;
            LBDateSortie.Text = null;
            LBGenre.Text = null;

            if (ListeFilm.Rows.Count > 0)
            {

                //Déclaration de variables
                string titreFilm = ListeFilm.Rows[ListeFilm.CurrentRow.Index].Cells[0].Value.ToString();

                //Un Film
                Film unFilm = new Film(titreFilm);

                //Affiche les infos du film trouvé
                AfficheFilmBox.ImageLocation = "images/" + unFilm.AfficheFilm;

                if (unFilm.Description != null)
                {
                    SynopsisTextBox.Text = Regex.Replace(unFilm.Description, "(<br/>|<br />)", "\r\n").Replace("&quot;", "\"");
                }
                else
                {
                    SynopsisTextBox.Text = null;
                } 
                
                LBDateSortie.Text = unFilm.DateRealisationFilm.ToString();

                //Affichage
                LBGenre.Text = unFilm.GetStringListGenre();
            }
        }
        #endregion

        #region Recupère les genres
        private string GetListGenreByIdFilm(string idFilm)
        {
            string resultList = "";
            DataTable resultGenre = lesDatas.GetGenreNameByIdFilm(idFilm);

            foreach (DataRow row in resultGenre.Rows)
            {
                resultList = resultList + row["nom_genre"].ToString() + ", ";
            }

            return resultList;
        }
        #endregion

        #region Interface
        //Quitte le programme
        private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Dispose();
            Close();
            Application.Exit();
        }

        //Lance la lecture d'un film
        private void LireFilm_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(@cheminFilm);
        }

        //On film selected
        private void ListeFilm_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            AfficheSelectedFilm();
        }
        #endregion

        #region Top Menu
        //Créer la base de données
        private void créerLaBaseDeDonnéesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SqliteData database = new SqliteData();

            //Création de la base de données
            database.CreatDatabase();
        }
        #endregion

        #region Charge les données de l'application
        private void LoadData()
        {
            lesDatas = new SqlDataAbstract();
            //Charge les titre des films
            AfficheFilm();

            //Charge les genres
            AfficheFilmGenre();
        }
        #endregion

        private void AfficheFilm()
        {
            DataTable result = new DataTable();
            result = lesDatas.GetListFilms();

            ListeFilm.DataSource = result;
        }

        private void AfficheFilmGenre()
        {
            DataTable result = new DataTable();
            result = lesDatas.GetListGenre();

            GridGenre.DataSource = result;
        }

        private void SAIRechercherFilm_TextChanged(object sender, EventArgs e)
        {

        }

        private void GridGenre_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            string nomGenre = GridGenre.Rows[e.RowIndex].Cells[0].Value.ToString();

            ListeFilm.DataSource = lesDatas.GetFilmByNomGenre(nomGenre);
        }

        private void BTNPlay_Click(object sender, EventArgs e)
        {
            string titreFilm = ListeFilm.Rows[ListeFilm.CurrentRow.Index].Cells[0].Value.ToString();

            Film unFilm = new Film(titreFilm);
            Fichier unFichier = new Fichier(null, null, unFilm.IdFilm);

            try
            {
                System.Diagnostics.Process.Start(unFichier.Path);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Le film n'a pas été trouvé.", "Erreur lors de la recherche du film.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void SAIRechercherFilm_TextChanged_1(object sender, EventArgs e)
        {
            ListeFilm.DataSource = lesDatas.GetFilmSearch(Regex.Replace(SAIRechercherFilm.Text, "(')", "''"));
        }

        private void ListeFilm_CellContentDoubleClick(object sender, EventArgs e)
        {
            AfficheSelectedFilm();
        }

        private void videLaBaseDeDonnéesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListeFilm.ClearSelection();
            
            //Vide toute la BDD
            SqliteData laBdd = new SqliteData();
            laBdd.VideDataBase();

            //Charge les données
            LoadData();
        }

        private void aProposeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            About WindowAbout = new About();
            WindowAbout.ShowDialog();
        }

        private void BTNModifierFilm_Click(object sender, EventArgs e)
        {
            ModifierFilm WindowModifierFilm = new ModifierFilm(ListeFilm.Rows[ListeFilm.CurrentRow.Index].Cells[0].Value.ToString());
            WindowModifierFilm.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FrmListClosed);
            WindowModifierFilm.ShowDialog();

            if (WindowModifierFilm == null)
            {
                LoadData();
            }
        }
    
        private void FrmListClosed(object sender, FormClosedEventArgs e)
        {
            this.LoadData();
        }

        private void ajouterDesDossiersToolStripMenuItem_Click(object sender, EventArgs e)
        {
                  SelectionnerFolderPath ajouterDesDossiers = new SelectionnerFolderPath();
                  ajouterDesDossiers.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FrmListClosed);
                  ajouterDesDossiers.ShowDialog();

                  if (ajouterDesDossiers == null)
                  {
                      LoadData();
                  }
        }
    }
}
